home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1997-01-28 | 6.9 KB | 253 lines |
- 10 'DISHANT - Parabolic Dish Reflector - 15 AUG 92 rev. 22 OCT 96
- 20 IF EX$=""THEN EX$="EXIT"
- 30 COMMON EX$
- 40 CLS:KEY OFF:SCREEN 0
- 50 COLOR 7,0,1
- 60 DIM X(16),Y(16)
- 70 PI=3.14159
- 80 U$="#####.##"
- 90 U1$="#####.#"
- 100 UL$=STRING$(80,205)
- 110 T$=" PARABOLIC DISH REFLECTOR"
- 120 '
- 130 '.....start
- 140 CLS
- 150 A=0:D=0:F=0:G=0:H=0:L=0:N=0:X=0:Y=0:Z=0
- 160 COLOR 15,2
- 170 PRINT T$;TAB(57);"by George Murphy VE3ERP ";
- 180 COLOR 1,0:PRINT STRING$(80,223);
- 190 COLOR 7,0
- 200 PRINT " Press number in < > to:
- 210 PRINT UL$;
- 220 PRINT " < 1 > RUN Dish Reflector program"
- 230 PRINT " < 2 > RUN Parabola Graphics program (draws parabolas to scale)"
- 240 PRINT " < 3 > RUN Circular Waveguide Dish Feeds program"
- 250 PRINT " < 4 > READ ME"
- 260 PRINT UL$;
- 270 PRINT " < 0 > EXIT"
- 280 Z$=INKEY$
- 290 IF Z$="1"THEN CLS:GOTO 360
- 300 IF Z$="2"THEN CLS:CHAIN "\bas\prog\dishmath"
- 310 IF Z$="3"THEN CLS:CHAIN"circfeed"
- 320 IF Z$="4"THEN CLS:GOTO 2270
- 330 IF Z$="0"THEN CLS:RUN EX$
- 340 GOTO 280
- 350 '
- 360 GOSUB 1760 'graphics page
- 370 GOSUB 2410 'screen dump
- 380 CLS
- 390 COLOR 15,2
- 400 PRINT T$;TAB(57);"by George Murphy VE3ERP ";
- 410 COLOR 1,0:PRINT STRING$(80,223);
- 420 COLOR 7,0
- 430 PRINT " Press number in < > to choose standard units of measure:"
- 440 PRINT UL$;
- 450 PRINT " < 1 > Metric"
- 460 PRINT " < 2 > U.S.A./Imperial"
- 470 Z$=INKEY$
- 480 IF Z$="1"THEN UM=2.54:UM$=" cm.":GOTO 510
- 490 IF Z$="2"THEN UM=1:UM$=" in.":GOTO 510
- 500 GOTO 470
- 510 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 520 '
- 530 '.....inputs
- 540 IF Y=0 THEN PRINT " ENTER: Radius of dish (";UM$;").........Y= ";
- 550 IF Y=0 THEN INPUT Y:Y=Y/UM:GOSUB 740
- 560 IF G<>0 THEN 610
- 570 IF X=0 THEN PRINT " ENTER: Depth of dish (";UM$;") if known:X= ";
- 580 IF X=0 THEN INPUT X:X=X/UM:GOSUB 740
- 590 IF F=0 THEN PRINT " ENTER: Focal Length (";UM$;")...........Z= ";
- 600 IF F=0 THEN INPUT F:F=F/UM:GOSUB 740
- 610 IF X OR F THEN 630
- 620 IF G=0 THEN INPUT " ENTER: Acceptance angle (degrees)..AFB= ";G:GOSUB 740
- 630 IF N=0 THEN INPUT " ENTER: Number of rings (12 maximum).....";N
- 640 IF N<=12 THEN 710
- 650 BEEP:PRINT
- 660 PRINT " There is only enough space on the screen ";
- 670 PRINT "to print data for 12 rings!"
- 680 PRINT:PRINT " Press any key to enter a number less than 13........."
- 690 IF INKEY$=""THEN 690
- 700 N=0:GOTO 630
- 710 GOSUB 740
- 720 GOTO 530
- 730 '
- 740 '.....calculate missing factors
- 750 IF G>90 THEN GG=1
- 760 IF A=0 AND G<>0 THEN A=G*PI/180
- 770 IF Y=0 AND D<>0 THEN Y=D/2
- 780 IF D=0 AND Y<>0 THEN D=2*Y
- 790 IF Z=0 AND Y*A<>0 THEN Z=Y/TAN(A)
- 800 IF Y=0 AND F*X<>0 THEN Y=SQR(4*F*X)
- 810 IF X=0 AND Y*F<>0 THEN X=Y^2/4/F
- 820 IF F=0 AND Y*X<>0 THEN F=Y^2/4/X
- 830 IF Y*X*F*N<>0 THEN 870
- 840 IF N THEN GOSUB 1650
- 850 RETURN
- 860 '
- 870 '.....screen print
- 880 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 890 PRINT " RING #";
- 900 PRINT TAB(22);"Diameter";
- 910 PRINT TAB(33);"Radius(Y)";
- 920 PRINT TAB(46);"Depth(X)";
- 930 PRINT TAB(58);"Circumf.";
- 940 PRINT TAB(68);"Capture Area"
- 950 PRINT UL$;
- 960 W=Y/N
- 970 '
- 980 FOR Z=1 TO N
- 990 Y(Z)=W*Z 'Radius Y co-ordinate
- 1000 X(Z)=(W*Z)^2/4/F 'Distance from apex X co-ordinate
- 1010 L=22.5*PI/180 'Angle in radians
- 1020 PRINT USING "###";Z;
- 1030 PRINT TAB(19);USING U$;2*Y(Z)*UM;:PRINT UM$;
- 1040 PRINT TAB(31);USING U$;Y(Z)*UM;:PRINT UM$;
- 1050 PRINT TAB(43);USING U$;X(Z)*UM;:PRINT UM$;
- 1060 PRINT TAB(55);USING U$;PI*2*Y(Z)*UM;:PRINT UM$;
- 1070 IF Z<>N THEN PRINT ""
- 1080 NEXT Z
- 1090 IF UM=1 THEN A=PI*Y(Z-1)^2/144:M$=" ft<UNK! {FD22}>:GOTO 1110
- 1100 A=(Y(Z-1)*25.4)^2*PI/10^6:M$=" m<UNK! {FD00}><UNK! {0006}><UNK! {001E}>V<UNK! {0004}>PRINT TAB(68);USING "#,###.##";A;:PRINT M$
- 1120 '
- 1130 LOCATE CSRLIN-1,5:PRINT "( Outer Ring )"
- 1140 PRINT UL$;
- 1150 IF F=X THEN A=PI/2
- 1160 IF F>X THEN A=ATN (Y/(F-X))
- 1170 IF F<X THEN A=PI-(ATN (Y/(X-F)))
- 1180 PRINT " Focal Length(Z):";USING "##,###.##";F*UM;:PRINT UM$;
- 1190 PRINT TAB(36)"Acceptance angle AFB:";USING "####.##";A*180/PI;
- 1200 PRINT "<UNK! {00F8}>"
- 1210 LN=CSRLIN
- 1220 PRINT UL$;
- 1230 PRINT " Do you want a performance estimate? (y/n)"
- 1240 Z$=INKEY$
- 1250 IF Z$="n"OR Z$="N"THEN 1290
- 1260 IF Z$="y"OR Z$="Y"THEN 1330
- 1270 GOTO 1240
- 1280 '
- 1290 VIEW PRINT LN TO 24:CLS:VIEW PRINT:LOCATE LN
- 1300 GOSUB 2410
- 1310 GOTO 110 'start
- 1320 '
- 1330 VIEW PRINT LN TO 24:CLS:VIEW PRINT:LOCATE LN
- 1340 INPUT " ENTER: Frequency.(MHz)...";H
- 1350 LOCATE CSRLIN-1:PRINT STRING$(80,32);:LOCATE CSRLIN-1
- 1360 PRINT " Frequency....";USING U$;H;:PRINT " MHz"
- 1370 '
- 1380 WM=300/H 'wavelength in meters
- 1390 WF=WM/0.3048 'wavelength in feet
- 1400 PRINT " Wavelength..."USING U$;WM*100;
- 1410 PRINT " cm."
- 1420 '
- 1430 PRINT " Approximate:-"
- 1440 G=0.55*(PI*D/12)^2/WF 'power ratio @ 55% efficiency
- 1450 PRINT " Power Ratio..";USING U1$;G;
- 1460 PRINT ":1 over an isotropic antenna"
- 1470 '
- 1480 LF=0.434294 'LOG factor 1/log(10) to convert to base 10
- 1490 DB=10*LOG(G/0.55)*LF 'gain @ 55% efficiency
- 1500 PRINT " Gain.........";USING U1$;DB-2.14;
- 1510 PRINT " dB over a dipole"
- 1520 '
- 1530 BW=70*WF/D*12 'beamwidth
- 1540 IF BW<=90 THEN 1570
- 1550 PRINT " The beamwidth is greater than 90<UNK! {00F8}> at this frequency.";
- 1560 GOTO 1590
- 1570 PRINT " Beamwidth....";USING U1$;BW;:PRINT "<UNK! {00F8}>";
- 1580 '
- 1590 GOSUB 2410
- 1600 GOTO 110 'start
- 1610 END
- 1620 '
- 1630 '.....calculate other factors from angle
- 1640 IF Z=0 THEN RETURN
- 1650 X=0
- 1660 T=1000
- 1670 IF T<=9.999E-06 THEN VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3:GOTO 1730
- 1680 X=X+T
- 1690 IF GG THEN F=X-Z ELSE F=X+Z
- 1700 Q=SQR(4*F*X)
- 1710 IF Q>=Y THEN X=X-T:T=T/10:GOTO 1670
- 1720 GOTO 1670
- 1730 IF GG THEN SWAP F,X
- 1740 RETURN
- 1750 '
- 1760 '.....graphics diagram
- 1770 CLS:COLOR 0,7
- 1780 PRINT " "
- 1790 PRINT " B DEFSNGSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDCOLOR "
- 1800 PRINT " CSRLINOFF CALL "
- 1810 PRINT " CSRLINOFF| CALL "
- 1820 PRINT " CSRLINOFF | CALL "
- 1830 PRINT " CSRLINOFF | CALL "
- 1840 PRINT " CSRLINOFF | CALL "
- 1850 PRINT " CSRLINOFF | CALL "
- 1860 PRINT " CSRLINOFF | CALL "
- 1870 PRINT " INKEY$OFF | "
- 1880 PRINT " CSRLIN | Y "
- 1890 PRINT " INKEY$OFF | "
- 1900 PRINT " CSRLIN | CALL "
- 1910 PRINT " INKEY$OFF | CALL "
- 1920 PRINT " CSRLIN | CALL "
- 1930 PRINT " INKEY$OFF | CALL "
- 1940 PRINT " CSRLIN | CALL "
- 1950 PRINT " INKEY$OFF | CALL "
- 1960 PRINT " CSRLIN | CALL "
- 1970 PRINT " ASOUNDSOUNDSOUNDSOUND<AXIS>SOUNDBEEPSOUNDSOUNDSOUNDSOUNDSOUNDF DEFSNGSOUND' "
- 1980 PRINT " CALL | CALL "
- 1990 PRINT " CALLDEFSNGSOUNDSOUNDSOUND X SOUNDSOUNDSOUNDDEFDBLCALL CALL "
- 2000 PRINT " CALLDEFSNGSOUNDSOUNDSOUNDSOUNDSOUNDSOUND Z SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDDEFDBLCALL "
- 2010 PRINT " ";
- 2020 COLOR 7,0
- 2030 D$=STRING$(52,205)
- 2040 C=28
- 2050 LOCATE 1,C:PRINT "PARABOLIC DISH (One half of dish profile is shown)."
- 2060 LOCATE 2,C:PRINT D$
- 2070 LOCATE 3,C:PRINT "(Due to the graphics limitations of your screen when"
- 2080 LOCATE 4,C:PRINT "in the Text mode, as it now is, the parabolic curve"
- 2090 LOCATE 5,C:PRINT "shown here is represented by stepped blocks)."
- 2100 LOCATE 6,C:PRINT D$
- 2110 LOCATE 7,C:PRINT "A = Centre of back of dish."
- 2120 LOCATE 8,C:PRINT "B = Any point on circumference."
- 2130 LOCATE 9,C:PRINT "F = Focal point of parabola."
- 2140 LOCATE 10,C:PRINT " (this is where you locate your antenna)"
- 2150 LOCATE 11,C:PRINT "L = Acceptance angle AFB."
- 2160 LOCATE 12,C:PRINT "X = Depth (distance from back of dish)"
- 2170 LOCATE 13,C:PRINT "Y = Radius of dish."
- 2180 LOCATE 14,C:PRINT "Z = Focal Length (distance of focal point from A)."
- 2190 LOCATE 15,C:PRINT D$
- 2200 LOCATE 16,C:PRINT "The program will calculate the X and Y co-ordinates"
- 2210 LOCATE 17,C:PRINT "(depth and radius) of several inner rings around the"
- 2220 LOCATE 18,C:PRINT "center line of the dish. These are also the X and Y"
- 2230 LOCATE 19,C:PRINT "co-ordinates of several points along curve AB."
- 2240 LOCATE 20,C:PRINT D$
- 2250 RETURN
- 2260 '
- 2270 '.....help
- 2280 LN=0
- 2290 OPEN"I",1,"\data\docfiles\dishant.txt"
- 2300 IF EOF(1)THEN 2370
- 2310 INPUT#1,Y$
- 2320 PRINT " ";Y$;
- 2330 LN=LN+1
- 2340 IF LN<24 THEN PRINT ""
- 2350 IF LN=24 THEN GOSUB 2410:LN=0:CLS
- 2360 GOTO 2300
- 2370 CLOSE
- 2380 GOSUB 2410
- 2390 ERASE X,Y:GOTO 10
- 2400 '
- 2410 'HARDCOPY
- 2420 GOSUB 2530:LOCATE 25,2:COLOR 14,6
- 2430 PRINT " Press 1 to print screen, 2 to print screen & ";
- 2440 PRINT "advance paper, or 3 to continue.";:COLOR 7,0
- 2450 Z$=INKEY$:IF Z$="3"THEN GOSUB 2530:RETURN
- 2460 IF Z$="1"OR Z$="2"THEN GOSUB 2530:GOTO 2480
- 2470 GOTO 2450
- 2480 FOR QX=1 TO 24:FOR QY=1 TO 80
- 2490 LPRINT CHR$(SCREEN(QX,QY));
- 2500 NEXT QY:NEXT QX
- 2510 IF Z$="2"THEN LPRINT CHR$(12)
- 2520 GOTO 2420
- 2530 LOCATE 25,1:PRINT STRING$(80,32);:RETURN
-